// 允许一个对象在其内部状态改变的时候改变它的行为，对象看起来似乎修改了它的类

// 状态（弱光、强光、关灯）
class State {
    constructor(state) {
        this.state = state;
    }

    handle(context) {
        context.setState(this);
    }
}

class Context {
    constructor() {
        this.state = null;
    }
    getState() {
        return this.state;
    }
    setState(state) {
        this.state = state;
    }
}

function main() {
    let context = new Context();
    let weak = new State("Weak");
    let strong = new State("Strong");
    let off = new State("Off");

    // 弱光
    weak.handle(context);
    console.log(context.getState());

    // 强光
    strong.handle(context);
    console.log(context.getState());

    // 关闭
    off.handle(context);
    console.log(context.getState());

}

main();
